﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Seguridad.Business;
using Crosland.Automotriz.Seguridad.Entity;
using DevExpress.Web.ASPxTreeView;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;
using System.Collections;
using DevExpress.Web.ASPxTreeList;
using System.Configuration;
using Crosland.Automotriz.Seguridad.ControlExeption;



namespace Crosland.Automotriz.Web.Seguridad
{
    public partial class wFrmGrupoModificar : System.Web.UI.Page
    {
        string idSeguridad = ConfigurationManager.AppSettings["Seguridad"];
        clsOpcionLogic opcionLogic = new clsOpcionLogic();
        static List<ListarTreeList> listTree = new List<ListarTreeList>();

        clsGrupoLogic grupoLogic = new clsGrupoLogic();
        //SeguridadLogic logic = new SeguridadLogic();
        List<T_SEG_OPCION> treeItems;
        List<T_SEG_OPCION> treeItemsChild;



        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack){

                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);
                this.DatosRecuperados();
              
                this.CargarArbol(opcionLogic.ObtenerOpcionesPorGrupo2(Convert.ToInt32(txtCodigoGrupo.Text)));
               
               
            }
        }

        void DatosRecuperados() {
            txtCodigoGrupo.Text = Session["ID_GRUPO"].ToString();
            txtDscGrupo.Text = Session["DES_DESCRIPCION"].ToString();
            txtNombreGrupo.Text = Session["DES_NOMBRE"].ToString();
            txtUserCreacion.Text = Session["USR_CREACION"].ToString();
            if (Session["IND_ESTADO"].ToString() == "A") {
                cboEstado.Text = "Activo";
            }
            else if (Session["IND_ESTADO"].ToString() == "I")
            {

                cboEstado.Text = "Inactivo";
            }
            else {


                cboEstado.Text = "Seleccione";
            }        
        }


        //cargar treaview


        void ListarTreeView() {
            List<T_SEG_OPCION> listar = opcionLogic.listarTreaview();

            foreach (T_SEG_OPCION item in listar)
            {
                ListarTreeList obj = new ListarTreeList();
                obj.ID_OPCION = item.ID_OPCION;
                obj.DES_NOMBRE = item.DES_NOMBRE;             
                obj.ID_PADRE = Convert.ToInt32(item.ID_PADRE);
                listTree.Add(obj);
            }






            //TreeListOpcion.DataSource = listTree;
            //TreeListOpcion.DataBind();
            
            var q = from ug in opcionLogic.listarGrupoOpcion()
                    where ug.ID_OPCION == Convert.ToInt32(txtCodigoGrupo.Text)
                    select ug;


            foreach (var item in q)
            {

                for (int i = 0; i < listTree.Count; i++)
                {
                    if (item.ID_GRUPO == listTree[i].ID_OPCION)
                    {
                   

                        
                    
                      

                        break;

                    }

                }


            }




        
        
        }

        protected void CargarArbol(List<int> list)
        {
            //this.TvListarOpciones.Nodes.Clear();

            try
            {
                treeItems = this.opcionLogic.listarTreaview();
                if (treeItems.Count > 0)
                {
                    this.LlenarOpciones(null, null, this.tvOpciones, list);
                }

                this.tvOpciones.ExpandAll();
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "CargarArbol");
                MensajesError(ex.Message, ex, "CargarArbol");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "CargarArbol");
                MensajesError(ex.Message, ex, "CargarArbol");
            }

          
        }

        public void LlenarOpciones(int? codigoPadre, TreeNode node, TreeView tree, List<int> list)
        {
            treeItemsChild = treeItems.FindAll(delegate(T_SEG_OPCION item) { return (item.ID_PADRE == codigoPadre); });

            foreach (T_SEG_OPCION hijos in treeItemsChild)
            {
                TreeNode newNode = new TreeNode(hijos.DES_NOMBRE, hijos.ID_OPCION.ToString());

                if (list.Contains(hijos.ID_OPCION))
                {
                    newNode.Checked = true;
                }

                if (codigoPadre == null) tree.Nodes.Add(newNode);
                else node.ChildNodes.Add(newNode);
                this.LlenarOpciones(hijos.ID_OPCION, newNode, null, list);
            }
        }

        public struct ListarTreeList{
         public int ID_OPCION { get; set; }
        public string DES_NOMBRE { get; set; }
        public int ID_PADRE { get; set; }
        
        
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtNombreGrupo.Text == String.Empty || txtDscGrupo.Text == String.Empty || cboEstado.SelectedIndex == 0)
                {
                    lblmsj.Text = String.Empty;
                    lblmsj.Text = "Rellene los campos vacios!";
                    string script = "ShowActualizar();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true); 
                }
                else {
                    this.Actualizar();
                }
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnGrabar_Click");
                MensajesError(ex.Message, ex, "btnGrabar_Click");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "btnGrabar_Click");
                MensajesError(ex.Message, ex, "btnGrabar_Click");
            }

            
        
        
        }

        void Actualizar()
        {
            try
            {
                T_SEG_GRUPO grupo = new T_SEG_GRUPO();
                grupo.ID_GRUPO = Convert.ToInt32(txtCodigoGrupo.Text);
                grupo.DES_NOMBRE = txtNombreGrupo.Text;
                grupo.DES_DESCRIPCION = txtDscGrupo.Text;
                grupo.IND_ESTADO = cboEstado.Text.Substring(0, 1);
                grupo.USR_ACTUALIZO =Session["User"].ToString();
                grupo.USR_CREACION = txtUserCreacion.Text;

                if (grupoLogic.Modicar(grupo))
                {
                    grupoLogic.EliminarGrupoopcion(Convert.ToInt32(txtCodigoGrupo.Text));
                    grupoLogic.GrabarAccesosGrupo(Convert.ToInt32(txtCodigoGrupo.Text), Tools.ObtenerNodoSeleccionados(this.tvOpciones));
                    string script = "ShowOK();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                }
            }
            catch (DataException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Actualizar");
                MensajesError(ex.Message, ex, "ListadoArticulosDetalle");
            }
            catch (Exception ex)
            {
                GuardarExceptionLog(ex.Message, ex, "Actualizar");
                MensajesError(ex.Message, ex, "Actualizar");
            }


           
        }

        void limpiarCampos() {
            txtNombreGrupo.Text = "";
            txtDscGrupo.Text = "";
        }
        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/wFrmGrupo.aspx?id="+idSeguridad);
        }

        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }



        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }


    }
}